
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<time.h>

/*
函数功能：归并排序
函数参数：
 arr: 待排序的数组
 length: 该数组的长度
 */
void merge_sort(int* arr, int length)
{
    int step = 1; //归并区间步长
    int *l=malloc(10000), *r=malloc(10000); //gcc, 两个临时数组，分别保存待归并的两个区间
    //int l[100], r[100]; //vc
    while(step < length)
    {
        int start = 0; //归并区间的开始下标
        while(start < length - step)
        {
            //归
            int len_l, len_r; //左右待归并区间的长度
            len_l = len_r = step;
            memcpy(l, arr + start, sizeof(int) * len_l);
            if(start + 2 * step > length)
            {
                len_r = length - start - step;
            }
            memcpy(r, arr + start + step, sizeof(int) * len_r);
            //并
            int i = 0, j = 0, k = start;
            while(i < len_l && j < len_r)
            {
                arr[k++] = l[i] < r[j] ? l[i++] : r[j++];
            }
            while(i < len_l)
            {
                arr[k++] = l[i++];
            }

            start += 2 * step;
        }
        step *= 2;
    }
}


void sort_pthread(void *data,size_t size, int (*cmp)(void* ,void*)){

}



int main1()
{
    printf("1\n");
    int *arr=malloc(10000);
    perror("malloc");
    srand((unsigned)time(NULL)); printf("2\n");
    for(int ii=0;ii<10000;ii++)
    *(arr+ii)=rand()%1000; perror("malloc");
        printf("3\n");
   // merge_sort(arr, 10000);





//    for(int i = 0; i < 9000; ++i)
//    {
//        printf("%d ", arr[i]);
//    }
//    printf("\n");
    return 0;
}
